# -*- coding: utf-8 -*-
import scrapy
from scrapy_demo01.items import YouKuFilm

from scrapy.http import Request
from scrapy.http.response.html import HtmlResponse


class YoukuSpiderSpider(scrapy.Spider):
    name = 'youku_spider'
    allowed_domains = ['youku.com']
    # 起始地址
    start_urls = ['https://list.youku.com/category/show/c_96_g_%E7%A7%91%E5%B9%BB.html']

    # xpath 语法：https://www.w3school.com.cn/xpath/xpath_syntax.asp
    # 对于需要解析上下层关系和值的情况，xpath更适用，正则比较麻烦
    # xpath选择语句除了手写外，还可以在浏览器中f12查看元素，选定指定的元素右键copy -> xpath
    def parse(self, response: HtmlResponse):
        film = YouKuFilm()
        # xpath 表达式 /一个斜杠代表根节点下某个元素 //两个斜杠代表匹配到的所有元素集合不管位置 @属性名=值 代表匹配属性名和值
        # /一个斜杆代表匹配一个根元素下的所有元素，如/div代表该div下的所有元素，无斜杠代表元素的子元素
        # film['title'] = response.xpath('//div[@class="p-thumb"]//a//@title').extract()  # 获取div标签class属性p-thumb下a标签的title属性值 所有满足条件的值，是个list
        # film['tag'] = response.xpath('//span[@class="p-time "]//span//text()').extract()  # 获取span标签class属性p-time下的span内容 所有满足条件的值
        # film['actors'] = response.xpath('//li[@class="actor"]//a//text()').extract()  # 获取li标签class属性为actor的下面a标签的文字内容 所有满足条件的值
        # print(response.xpath('//div[@class="yk-pack pack-film"]').get())  # 获取所有匹配到元素第一个，是一个完整的元素包含其子元素
        # print(response.xpath('//div[@class="yk-pack pack-film"]').getall())  # 获取所有匹配到的元素
        # print(type(response), film)
        # yield film  # 传给pipline
        # print(response.text)
        total = response.xpath('//span[@id="total_videonum"]/text()').extract().pop()  # extract返回的list
        print('+' * 33, total, '+' * 33)
        selector_list = response.xpath('//div[@class="yk-pack pack-film"]')  # //两个斜杠代表所有div元素
        for item in selector_list:  # 循环获取所有元素
            film['title'] = item.xpath('div[@class="p-thumb"]/a/@title').extract()[0]  # 代表匹配当前节点下的所有子元素中筛选符合的条件的div， 相对路径
            film['tag'] = item.xpath('//span[@class="p-time "]/span/text()').extract()[0]  # //  当前节点所有span子元素class=p-time的
            # film['tag'] = item.xpath('ul/li/span[@class="p-time "]/span/text()').extract()[0]  # 相对路径筛选查找
            # print(item.xpath('descendant::span/span/text()').extract())  # 通过descendant::span获取当前节点下所有span节点下的span节点，与上一条效果相同
            film['actors'] = item.xpath('ul/li[@class="actor"]/a/text()').extract()
            film['timeDesc'] = item.xpath('ul[@class="info-list"]/li[last()]/text()').extract()
            # print(film['title'], film['tag'], film['actors'], film['timeDesc'])
            # print(type(item), film)
            # print(item.get())  # string 类型的html节点
            yield film
        print('+' * 66)

